<script>
  /*
  描述
    在数组 arr 末尾添加元素 item。不要直接修改数组 arr，结果返回新的数组

  append([1, 2, 3, 4],  10)
  // [1, 2, 3, 4, 10]
  */
  function append(arr, item) {}
</script>

<script>
  /*
  描述
    删除数组 arr 最后一个元素。不要直接修改数组 arr，结果返回新的数组

  truncate([1, 2, 3, 4])
  // [1, 2, 3]
  */
  function truncate(arr) {}
</script>

<script>
  /*
  描述
  在数组 arr 开头添加元素 item。不要直接修改数组 arr，结果返回新的数组

  prepend([1, 2, 3, 4], 10)
  // [10, 1, 2, 3, 4]
  */
  function prepend(arr, item) {}
</script>

<script>
  /*
  描述
    删除数组 arr 第一个元素。不要直接修改数组 arr，结果返回新的数组

  curtail([1, 2, 3, 4])
  // [2, 3, 4]
  */
  function curtail(arr) {}
</script>

<script>
  /*
  描述
  在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr，结果返回新的数组
  insert([1, 2, 3, 4], 'z', 2)
  // [1, 2, 'z', 3, 4]
  */

  function insert(arr, item, index) {
    let ret = [...arr]
    ret.splice(index, 0, item)
    return ret
  }
</script>

<script>
  /*
  描述
  统计数组 arr 中值等于 item 的元素出现的次数
  count([1, 2, 4, 4, 3, 4, 3], 4)
  // 3
  */
  function count(arr, item) {
    return arr.filter((a) => a === item).length
  }
</script>

<script>
  /*
  描述
  找出数组 arr 中重复出现过的元素（不用考虑返回顺序）

  duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3])
  // [1, 3, 4]

  */
  function duplicates(arr) {
    const ret = []
    arr.forEach((a, index) => {
      if (ret.indexOf(a) === -1 && index !== arr.lastIndexOf(a)) {
        ret.push(a)
      }
    })
    return ret
  }
</script>

<script>
  /*
  描述
  为数组 arr 中的每个元素求二次方。不要直接修改数组 arr，结果返回新的数组
  square([1, 2, 3, 4])
  // [1, 4, 9, 16]
  */
  function square(arr) {
    return arr.map((v) => v * v)
  }
</script>

<script>
  /*
  描述
  在数组 arr 中，查找值与 item 相等的元素出现的所有位置

  findAllOccurrences(['a','b','c','d','e','f','a','b','c'], 'a')
  // [0, 6]

  */
  function findAllOccurrences(arr, target) {
    let c = []
    arr.forEach((a, i) => a === target && c.push(i))
    return c
  }
</script>
